/*
 * Copyright (c) 2020 - present, Inspur Genersoft Co., Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.inspur.edp.bff.designtime.generator.entity.node;

import com.inspur.edp.bff.designtime.generator.entity.VmEntityGenContext;
import com.inspur.edp.bff.designtime.generator.entity.data.ExtendEntityDataGenerator;
import com.inspur.edp.cef.generator.entityGenerator.entity.EntityNodeGenerator;
import com.inspur.edp.cef.generator.entityGenerator.entity.EntityNodeGeneratorContext;
import com.inspur.edp.cef.generator.entityGenerator.entity.entityData.EntityDataGenerator;
import com.inspur.edp.das.commonmodel.IGspCommonObject;
import com.inspur.edp.formserver.viewmodel.GspViewObject;

public class VmExtendNodeGenerator extends EntityNodeGenerator {

  private IGspCommonObject node;

  public VmExtendNodeGenerator(IGspCommonObject node, VmEntityGenContext entityGenCtx) {
    super(node, entityGenCtx);
    this.node = node;
  }

  //C# TO JAVA CONVERTER WARNING: There is no Java equivalent to C#'s shadowing via the 'new' keyword:
//ORIGINAL LINE: private new VoNodeGeneratorContext getContext() { return (VoNodeGeneratorContext)super.context; }
  private VoNodeGeneratorContext getVoNodeGenContext() {
    return (VoNodeGeneratorContext) super.getContext();
  }
  //protected override BaseGenerator getAssoGenerator(GspAssociation asso)
  //{
  //    return new VoAssoGenerator(asso, Context, EntityGenCtx.ProjectAssemblyInfo, vmGenContext);
  //}

  //protected override BaseGenerator getChildNodeGenerator(IGspCommonObject childObj)
  //{
  //    return new VmExtendNodeGenerator(childObj, EntityGenCtx, vmGenContext);
  //}

  ///#region Cef部分迁移
  //protected override EntityDataSerializerGenerator getSerializerGenerator()
  //{
  //    return new CefEntityDataSerGenerator(vmGenContext, Node);
  //}
  ///#endregion
  @Override
  protected EntityNodeGeneratorContext createEntityNodeGeneratorContext() {
    return new VoNodeGeneratorContext(
        (GspViewObject) ((dataType instanceof GspViewObject) ? dataType : null),
        (VmEntityGenContext) ((entityGenContext instanceof VmEntityGenContext) ? entityGenContext
            : null));
  }

  @Override
  protected EntityNodeGenerator createChildObjectGenerator(IGspCommonObject childObject) {
    return new VmExtendNodeGenerator(childObject,
        (VmEntityGenContext) ((entityGenContext instanceof VmEntityGenContext) ? entityGenContext
            : null));
  }

  @Override
  protected EntityDataGenerator getEntityDataGenerator() {
    return new ExtendEntityDataGenerator(node, getVoNodeGenContext());
  }
}
